package negocio.bd;

import base.RecogidaEquipos;
import java.sql.SQLException;
import java.util.ArrayList;
import utiles.ConexionBD;
import utiles.ConversorFecha;
import utiles.Logger;

/**
 * Clase para el manejo de las ordenes de recogida en la base de datos.
 * @author Efren
 * @version 0.0.1
 * @since 18/02/2013
 */
public class BDRecogidas {
    public static final String idPresupuesto = "idPresupuesto";
    public static final String fechaAceptado = "fechaAceptacion";
    public static final String entregado = "entregado";
    public static final int buscarPorFecha = 1;
    public static final int buscarPorPresupuesto = 2;
    public static final int ASC = 1;
    public static final int DESC = 2;
    
    public static RecogidaEquipos[]  buscar(int campoBusqueda, String busqueda, int orden, boolean exacta){
        java.sql.Connection db = new ConexionBD().getConnection();
        ArrayList<RecogidaEquipos> recogidas = new  ArrayList<>(0);
        String query = "SELECT * FROM `gestionTienda`.`RecogidasEquipos` ";
        if  (campoBusqueda == buscarPorFecha){
                query += "WHERE " + fechaAceptado + " like " + busqueda +"% ORDER BY " + fechaAceptado;
        } else {
                query += "WHERE " + idPresupuesto + " like " + busqueda + "% ORDER BY " + idPresupuesto;
        }
        //Si la busqueda a de ser exacta quitar like y % de la consulta
        if (exacta){
            query = query.replaceAll("like", "=");
            query = query.replace("%", "");
        }
        if (orden == DESC){
            query += " DESC";
        } else {
            query += " ASC";
        }
        try {
            java.sql.Statement statement = db.createStatement();
            java.sql.ResultSet res = statement.executeQuery(query);
            while (res.next()){
                RecogidaEquipos temp = new RecogidaEquipos();
                temp.setIdPresupuesto(res.getLong(idPresupuesto));
                temp.setFechaAceptacion(ConversorFecha.obtenerFecha(res.getString(fechaAceptado)));
                if (res.getInt(entregado) == 1){
                    temp.entregar();
                }
                recogidas.add(temp);
            }
            return recogidas.toArray(new RecogidaEquipos[0]);
        } catch (SQLException ex){
            Logger.printError(ex.getMessage());
        }
        return null;
    }
    public static RecogidaEquipos[] obtenerEntregados(){
        java.sql.Connection db = new ConexionBD().getConnection();
        ArrayList<RecogidaEquipos> recogidas = new  ArrayList<>(0);
        String query = "SELECT * FROM `gestionTienda`.`RecogidasEquipos` WHERE " + entregado + " = 1";
        try {
            java.sql.Statement statement = db.createStatement();
            java.sql.ResultSet res = statement.executeQuery(query);
            while (res.next()){
                RecogidaEquipos temp = new RecogidaEquipos();
                temp.setIdPresupuesto(res.getLong(idPresupuesto));
                temp.setFechaAceptacion(ConversorFecha.obtenerFecha(res.getString(fechaAceptado)));
                if (res.getInt(entregado) == 1){
                    temp.entregar();
                }
                recogidas.add(temp);
            }
            return recogidas.toArray(new RecogidaEquipos[0]);
        } catch (SQLException ex){
            Logger.printError(ex.getMessage());
        }
        return null;
    }
    public static RecogidaEquipos[] obtenerNoEntregados(){
        java.sql.Connection db = new ConexionBD().getConnection();
        ArrayList<RecogidaEquipos> recogidas = new  ArrayList<>(0);
        String query = "SELECT * FROM `gestionTienda`.`RecogidasEquipos` WHERE " + entregado + " = 0";
        try {
            java.sql.Statement statement = db.createStatement();
            java.sql.ResultSet res = statement.executeQuery(query);
            while (res.next()){
                RecogidaEquipos temp = new RecogidaEquipos();
                temp.setIdPresupuesto(res.getLong(idPresupuesto));
                temp.setFechaAceptacion(ConversorFecha.obtenerFecha(res.getString(fechaAceptado)));
                if (res.getInt(entregado) == 1){
                    temp.entregar();
                }
                recogidas.add(temp);
            }
            return recogidas.toArray(new RecogidaEquipos[0]);
        } catch (SQLException ex){
            Logger.printError(ex.getMessage());
        }
        return null;
    }
    public static RecogidaEquipos obtener(long idPresupuesto){
        java.sql.Connection db = new ConexionBD().getConnection();
        try {
            java.sql.Statement select = db.createStatement();
            java.sql.ResultSet res = select.executeQuery("SELECT * FROM `gestionTienda`.`RecogidasEquipos` WHERE " + BDRecogidas.idPresupuesto + " = " + idPresupuesto);
            while (res.next()){
                RecogidaEquipos recogida = new RecogidaEquipos();
                recogida.setIdPresupuesto(res.getLong(BDPresupuestos.idPresupuesto));
                recogida.setFechaAceptacion(ConversorFecha.obtenerFecha(res.getString(fechaAceptado)));
                if (res.getInt(entregado) == 1){
                    recogida.entregar();
                }
                return recogida;
            }
        }catch (SQLException ex){
            Logger.printError(ex.getMessage());
        }return null;
    }
     public static boolean existe(long idPresupuesto){
        java.sql.Connection db = new ConexionBD().getConnection();
        try {
            java.sql.Statement select = db.createStatement();
            java.sql.ResultSet res = select.executeQuery("SELECT * FROM `gestionTienda`.`RecogidasEquipos` WHERE " + BDRecogidas.idPresupuesto + " = " + idPresupuesto);
            if (res.next()){
                return true;
            }
        } catch (SQLException ex){
            Logger.printError(ex.getMessage());
        }return false;
    }
    public static RecogidaEquipos[] obtenerTodos(){
        java.sql.Connection db = new ConexionBD().getConnection();
        ArrayList<RecogidaEquipos> recogidas = new  ArrayList<>(0);
        String query = "SELECT * FROM `gestionTienda`.`RecogidasEquipos`";
        try {
            java.sql.Statement statement = db.createStatement();
            java.sql.ResultSet res = statement.executeQuery(query);
            while (res.next()){
                RecogidaEquipos temp = new RecogidaEquipos();
                temp.setIdPresupuesto(res.getLong(idPresupuesto));
                temp.setFechaAceptacion(ConversorFecha.obtenerFecha(res.getString(fechaAceptado)));
                if (res.getInt(entregado) == 1){
                    temp.entregar();
                }
                recogidas.add(temp);
            }
            return recogidas.toArray(new RecogidaEquipos[0]);
        } catch (SQLException ex){
            Logger.printError(ex.getMessage());
        }
        return null;
    }
    public static boolean insertar(RecogidaEquipos recogida){
        if (!existe(recogida.getIdPresupuesto())){
            java.sql.Connection db = new ConexionBD().getConnection();
            try {
                java.sql.PreparedStatement insert = db.prepareStatement("INSERT INTO `gestionTienda`.`RecogidasEquipos` VALUES (?,?,?)");
                insert.setLong(1, recogida.getIdPresupuesto());
                insert.setString(2, ConversorFecha.getFechaFormatoBD(recogida.getFechaAceptacion()));
                if (recogida.isEntregado()){
                    insert.setInt(3, 1);
                } else {
                    insert.setInt(3,0);
                }
                insert.executeUpdate();
                return true;
            } catch (SQLException ex){
                Logger.printError(ex.getMessage());
            }
        }return false;
    }
    public static boolean actualizar(RecogidaEquipos recogida){
        if (existe(recogida.getIdPresupuesto())){
            java.sql.Connection db = new ConexionBD().getConnection();
            try {
                java.sql.PreparedStatement update = db.prepareStatement("UPDATE `gestionTienda`.`RecogidasEquipos` SET " + fechaAceptado + " = ? " + entregado +" = ? WHERE " + BDRecogidas.idPresupuesto + " = ?");
                update.setString(1,ConversorFecha.getFechaFormatoBD(recogida.getFechaAceptacion()));
                if (recogida.isEntregado()){
                    update.setInt(2, 1);
                } else {
                    update.setInt(2,0);
                }
                update.setLong(3, recogida.getIdPresupuesto());
                if (update.executeUpdate()==1){
                    return true;
                }
            } catch (SQLException ex){
                Logger.printError(ex.getMessage());
            }
        }return false;
    }
}
